// 甘特图路由切换修复验证脚本
// 在浏览器控制台中运行此脚本来自动测试修复效果

console.log('🚀 开始甘特图路由切换修复验证...');

// 测试配置
const TEST_CONFIG = {
  routes: ['/', '/about', '/gantt', '/products'],
  projectIds: [1, 2, 3, 4],
  switchCount: 3, // 路由切换次数
  clickDelay: 1000, // 点击延迟（毫秒）
  routeDelay: 2000 // 路由切换延迟（毫秒）
};

// 测试状态
let testResults = {
  routeSwitches: 0,
  projectClicks: 0,
  errors: [],
  success: 0
};

// 错误监听器
const originalConsoleError = console.error;
console.error = function(...args) {
  const errorMsg = args.join(' ');
  if (errorMsg.includes('getService') || errorMsg.includes('tasksStore')) {
    testResults.errors.push({
      type: 'gantt_error',
      message: errorMsg,
      timestamp: new Date().toISOString()
    });
    console.log('❌ 检测到甘特图错误:', errorMsg);
  }
  originalConsoleError.apply(console, args);
};

// 工具函数
function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

function navigateTo(path) {
  return new Promise((resolve) => {
    if (window.Vue && window.Vue.prototype.$router) {
      window.Vue.prototype.$router.push(path);
      setTimeout(resolve, TEST_CONFIG.routeDelay);
    } else {
      console.warn('Vue Router 不可用，使用 location.hash');
      window.location.hash = path;
      setTimeout(resolve, TEST_CONFIG.routeDelay);
    }
  });
}

function clickProjectRow(projectId) {
  return new Promise((resolve) => {
    setTimeout(() => {
      const tableRows = document.querySelectorAll('.vxe-table .vxe-body--row');
      if (tableRows.length > 0 && tableRows[projectId - 1]) {
        console.log(`🖱️ 点击项目 ${projectId}`);
        tableRows[projectId - 1].click();
        testResults.projectClicks++;
        setTimeout(resolve, TEST_CONFIG.clickDelay);
      } else {
        console.warn(`项目行 ${projectId} 未找到`);
        resolve();
      }
    }, 500);
  });
}

function checkGanttStatus() {
  const ganttContainer = document.getElementById('gantt_here');
  if (!ganttContainer) {
    return { status: 'no_container', message: '甘特图容器未找到' };
  }
  
  if (ganttContainer.children.length === 0) {
    return { status: 'empty_container', message: '甘特图容器为空' };
  }
  
  const hasGanttContent = ganttContainer.querySelector('.gantt_container');
  if (!hasGanttContent) {
    return { status: 'no_gantt', message: '甘特图未渲染' };
  }
  
  return { status: 'ok', message: '甘特图正常' };
}

// 主测试函数
async function runGanttTest() {
  console.log('📋 测试配置:', TEST_CONFIG);
  
  try {
    // 测试路由切换和项目点击
    for (let i = 0; i < TEST_CONFIG.switchCount; i++) {
      console.log(`\n🔄 第 ${i + 1} 轮测试开始`);
      
      // 切换到其他页面
      for (const route of TEST_CONFIG.routes) {
        if (route !== '/gantt') {
          console.log(`📍 导航到 ${route}`);
          await navigateTo(route);
          testResults.routeSwitches++;
        }
      }
      
      // 回到甘特图页面
      console.log('📍 导航到甘特图页面');
      await navigateTo('/gantt');
      testResults.routeSwitches++;
      
      // 检查甘特图状态
      const ganttStatus = checkGanttStatus();
      console.log('📊 甘特图状态:', ganttStatus.message);
      
      // 测试项目点击
      for (const projectId of TEST_CONFIG.projectIds) {
        console.log(`🎯 测试点击项目 ${projectId}`);
        await clickProjectRow(projectId);
        
        // 检查是否有错误
        const errorsBefore = testResults.errors.length;
        await sleep(500); // 等待可能的错误
        const errorsAfter = testResults.errors.length;
        
        if (errorsAfter === errorsBefore) {
          testResults.success++;
          console.log('✅ 项目点击成功，无错误');
        } else {
          console.log('❌ 项目点击产生错误');
        }
      }
    }
    
    // 输出测试结果
    console.log('\n📊 测试结果汇总:');
    console.log('==================');
    console.log(`路由切换次数: ${testResults.routeSwitches}`);
    console.log(`项目点击次数: ${testResults.projectClicks}`);
    console.log(`成功操作次数: ${testResults.success}`);
    console.log(`错误次数: ${testResults.errors.length}`);
    
    if (testResults.errors.length === 0) {
      console.log('🎉 所有测试通过！甘特图路由切换问题已修复！');
    } else {
      console.log('⚠️ 发现以下错误:');
      testResults.errors.forEach((error, index) => {
        console.log(`${index + 1}. ${error.message}`);
      });
    }
    
    return testResults;
    
  } catch (error) {
    console.error('❌ 测试执行失败:', error);
    return { error: error.message, results: testResults };
  }
}

// 导出测试函数供手动调用
window.testGanttFix = runGanttTest;

console.log('✅ 测试脚本已加载');
console.log('💡 在甘特图页面运行 testGanttFix() 开始自动测试');
console.log('💡 或者手动进行路由切换测试');
